
#include "../inc/saveBmp.h"
#include "../inc/lcd.h"

void saveBMP(const char* username, int width, int height) {
    char image_data[800*480*3] = {0};
    int index = 0;
    int temp;
    char path[255] = "./user_info/user";

    printf("%s\n",username);
    // log
    strcat(path,username);
    printf("%s\n",path);

    time_t rawtime;  
    time(&rawtime);  
  
    // 将时间戳转换为本地时间的struct tm结构体  
    struct tm * timeinfo = localtime(&rawtime);  
    // 定义一个足够大的char数组来存储格式化的时间字符串  
    // 注意：根据需要的格式和系统，可能需要更大的数组  
    char buffer[80];  
    // 使用strftime函数将时间格式化为字符串，并存储在buffer中  
    // 这里使用了"%Y-%m-%d %H:%M:%S"格式，即年-月-日 时:分:秒  
    // strftime(buffer, sizeof(buffer), "%Y-%m-%d%-H:%M:%S", timeinfo); 
    snprintf(buffer, sizeof(buffer), "%ld", (long)rawtime); 

    strcat(path,"/");
    printf("%s\n",path);
    strcat(path,buffer);
    printf("%s\n",path);
    strcat(path,".bmp");
    printf("%s\n",path);

    FILE* file = fopen(path, "w");
    //printf("1111\n");
    if (file == NULL) {
        printf("无法打开文件\n");
        return;
    }
      
    for (int i = 479; i > -1; --i) {  
        for (int j = 0; j < 800; ++j) {  
            // 获取当前int的低24位  
            uint32_t low24bits = lcd_p[i][j] & 0x00FFFFFF;  
              
            // 将低24位分布到三个char中  
            image_data[index++] = (char)(low24bits); // 高8位  
            image_data[index++] = (char)(low24bits >> 8);  // 中间8位  
            image_data[index++] = (char)(low24bits >> 16);       // 低8位  
        }    //R G B
            // B G R
    }  
    //printf("after for\n");
    // 计算图像数据大小和文件大小
    int image_size = width * height * 3; // 假设每个像素有RGB三个分量，每个分量占一个字节
    int file_size = sizeof(BMPHeader) + image_size;


    // 填充BMP文件头
    BMPHeader header;
    header.type = 0x4D42;
    header.size = file_size;
    header.reserved1 = 0;
    header.reserved2 = 0;
    header.offset = sizeof(BMPHeader);
    header.header_size = 40;
    header.width = width;
    header.height = height;
    header.planes = 1;
    header.bits_per_pixel = 24; // RGB三个分量，每个分量占8位
    header.compression = 0;
    header.image_size = image_size;
    header.x_resolution = 0;
    header.y_resolution = 0;
    header.colors_used = 0;
    header.colors_important = 0;

    // 写入BMP文件头
    fwrite(&header, sizeof(BMPHeader), 1, file);

    // 写入图像数据
    fwrite(image_data, image_size, 1, file);

    fclose(file);
}
